package config

import (
	"fmt"

	"excel-exporter/types"
)

// processorRegistry 处理器注册表
var processorRegistry = make(map[string]types.ProcessorFunc)

// RegisterProcessor 注册处理器
func RegisterProcessor(name string, processor types.ProcessorFunc) {
	processorRegistry[name] = processor
}

// GetProcessor 获取处理器
func GetProcessor(name string) (types.ProcessorFunc, error) {
	processor, exists := processorRegistry[name]
	if !exists {
		return nil, fmt.Errorf("处理器未找到: %s", name)
	}
	return processor, nil
}

// GetProcessorForSheet 获取子表的处理器
func GetProcessorForSheet(sheetConfig *types.Sheet, exportType string) (types.ProcessorFunc, error) {
	var processorName string
	
	// 根据导出类型选择处理器
	if exportType == "server" && sheetConfig.ServerProcessor != "" {
		processorName = sheetConfig.ServerProcessor
	} else if exportType == "client" && sheetConfig.ClientProcessor != "" {
		processorName = sheetConfig.ClientProcessor
	} else if sheetConfig.Processor != "" {
		// 使用统一处理器（向后兼容）
		processorName = sheetConfig.Processor
	} else {
		// 默认处理器
		processorName = "default"
	}
	
	return GetProcessor(processorName)
}

// InitProcessors 初始化所有处理器
func InitProcessors() {
	// 注册默认处理器
	RegisterProcessor("default", defaultProcessor)
	
	// 注册服务端专用处理器
	RegisterProcessor("server_only", serverOnlyProcessor)
	
	// 注册客户端专用处理器
	RegisterProcessor("client_only", clientOnlyProcessor)
	
	// 常量表处理函数
	RegisterProcessor("const_processor", constProcessor)

	// 奖励表关联检查道具表
	RegisterProcessor("reward_processor", rewardProcessor)

	// 可以继续注册更多处理器...
}